//
//  SKUserAccountViewModel.swift
//  WeiboProjectYL
//
//  Created by yanli on 16/7/12.
//  Copyright © 2016年 mountainPassCell. All rights reserved.
//

import UIKit

//  封装OAuth 登录相关接口
class SKUserAccountViewModel: NSObject {

    // 单例访问点
    static let shareUserAccount: SKUserAccountViewModel = SKUserAccountViewModel()
    // 获取用户对象的从沙盒路径里面解档对象
    var userAccount: SKUserAccount? {
        // 解档用户对象
        return SKUserAccount.loadUserAccount()
    }
    
    // 重写构造函数私有化
    private override init() {
        super.init()
    }
    
    // 封装判断accessToken(令牌)是否为nil,表示登录结果
    var isLogin: Bool {
        return accessToken != nil
    }
    
    
    /*
    如果accessToken为nil, 不用判断,表示没有登陆
    如果accessToken不nil, 判断accessToken是否过期,不过期返回一个正确的accessToken,过期返回nil
    */
    var accessToken: String? {
        // 判断 accessToken 是否为nil,为nil表示没有登录
        guard let token = userAccount?.access_token else {
            return nil
        }
        
        // token 一定有值, 过期时间大于我们当前时间表示没有过期
        let result = userAccount?.expiresDate?.compare(NSDate())
        // 使用降序表示我们进行从大到小
        if result == NSComparisonResult.OrderedDescending {
            //过期时间大于当前时间
            return token
        } else {
            return nil
        }
        
    }
    
    
    
    // MARK: -- 封装 OAuth 获取令牌和用户信息
    
    //  通过授权码(code)获取accesstoken ,去掉 private OAuth需要访问
    func requestAccesstoken(code: String, callBack: (isSuccess: Bool)->()) {
        
        //创建单例
        SKNetworkTools.shareTools.requestAccesstoken(code) { (response, error) -> () in
            //如果有错误 直接返回
            if error != nil {
                print(error)
                return
            }
            
            // 代码执行到此,成功的回调
            guard let dic = response as? [String: AnyObject] else {
                print("不是一个正确的json格式")
                return
            }
            
            //  代码执行到此, dic一定有值,并且是符合我们需要的类型
            let userAccount = SKUserAccount(dic: dic)
            
            // 通过accessToken和uid获取用户信息
            self.requestUserInfo(userAccount, callBack: callBack)
  
            }
    
        }
    
    
        // 获取用户信息
        private func requestUserInfo(userAccount: SKUserAccount, callBack: (isSuccess: Bool)->()) {
            
            //使用封装好的 获取用户信息 网络请求 尾随闭包
            SKNetworkTools.shareTools.requestUserInfo(userAccount) { (response, error) -> () in
                //如果有错误
                if error != nil {
                    print(error)
                    return
                }
                
                guard let dic = response as? [String: AnyObject] else {
                    print("不是一个正确json格式")
                    return
                }
                
                //  代码执行到此字典一定有值
                
                let name = dic["name"]
                let avatar_large = dic["avatar_large"]
                
                //  设置用户名和头像
                userAccount.name = name as? String
                userAccount.avatar_large = avatar_large as? String
                // 保存用户对象
                let result = userAccount.saveUserAccount()
                if result {
                    callBack(isSuccess: true)
                }else {
                    callBack(isSuccess: false)
                }
                
                print(userAccount)
            }
        }

    
}


















